{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "0edfe803-2ab8-4f43-a906-06ecbabeec55",
   "metadata": {},
   "source": [
    "1. Example why cross validation is important"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "c8e7d1a0-150f-456e-9088-92227a7fc8b5",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "import pandas as pd \n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import lightgbm as lgb\n",
    "from sklearn.metrics import accuracy_score, roc_auc_score\n",
    "from sklearn.model_selection import (\n",
    "    train_test_split,\n",
    "    TimeSeriesSplit,\n",
    "    KFold,\n",
    "    StratifiedKFold,\n",
    "    GroupKFold,\n",
    "    StratifiedGroupKFold\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "855f0c1e-06a9-42e3-92d5-ce42b77b9ee6",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "def get_prep_data():\n",
    "    data = pd.read_csv('/home/mikepi/Coding/Excs/time_series_rob_mulla/time_series-xgboost/healthcare-dataset-stroke-data.csv')\n",
    "    data['ever_married'] = (\n",
    "        data[\"ever_married\"].replace('Yes', True).replace('No', False))\n",
    "    data['gender'] = data['gender'].astype('category')\n",
    "    data['smoking_status'] = data['smoking_status'].astype('category')\n",
    "    data['Residence_type'] = data['Residence_type'].astype('category')\n",
    "    data['work_type'] = data['work_type'].astype('category')\n",
    "    data['doctor'] = np.random.randint(0, 8, size=len(data))\n",
    "    holdout_ids = data.sample(n=500, random_state=529).index\n",
    "        \n",
    "    train = (\n",
    "        data.loc[~data.index.isin(holdout_ids)]\n",
    "        .sample(frac=1, random_state=529)\n",
    "        .sort_values('doctor')\n",
    "        .reset_index(drop=True)\n",
    "    )\n",
    "        \n",
    "    holdout = (\n",
    "        data.loc[data.index.isin(holdout_ids)]\n",
    "        .sample(frac=1, random_state=529)\n",
    "        .sort_values('doctor')\n",
    "        .reset_index(drop=True)\n",
    "    )\n",
    "    \n",
    "    return train, holdout\n",
    "        \n",
    "train, holdout  = get_prep_data()       "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "f5676ae2-bfc8-43c5-8c1c-05dc00287dc3",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>gender</th>\n",
       "      <th>age</th>\n",
       "      <th>hypertension</th>\n",
       "      <th>heart_disease</th>\n",
       "      <th>ever_married</th>\n",
       "      <th>work_type</th>\n",
       "      <th>Residence_type</th>\n",
       "      <th>avg_glucose_level</th>\n",
       "      <th>bmi</th>\n",
       "      <th>smoking_status</th>\n",
       "      <th>stroke</th>\n",
       "      <th>doctor</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>15533</td>\n",
       "      <td>Male</td>\n",
       "      <td>46.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>False</td>\n",
       "      <td>Private</td>\n",
       "      <td>Urban</td>\n",
       "      <td>107.59</td>\n",
       "      <td>26.2</td>\n",
       "      <td>formerly smoked</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>59223</td>\n",
       "      <td>Male</td>\n",
       "      <td>48.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>True</td>\n",
       "      <td>Private</td>\n",
       "      <td>Urban</td>\n",
       "      <td>68.13</td>\n",
       "      <td>38.0</td>\n",
       "      <td>formerly smoked</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>16600</td>\n",
       "      <td>Male</td>\n",
       "      <td>9.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>False</td>\n",
       "      <td>children</td>\n",
       "      <td>Rural</td>\n",
       "      <td>65.52</td>\n",
       "      <td>33.5</td>\n",
       "      <td>Unknown</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>7538</td>\n",
       "      <td>Female</td>\n",
       "      <td>55.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>True</td>\n",
       "      <td>Self-employed</td>\n",
       "      <td>Rural</td>\n",
       "      <td>94.75</td>\n",
       "      <td>27.9</td>\n",
       "      <td>smokes</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>55466</td>\n",
       "      <td>Female</td>\n",
       "      <td>69.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>Private</td>\n",
       "      <td>Urban</td>\n",
       "      <td>196.33</td>\n",
       "      <td>25.3</td>\n",
       "      <td>never smoked</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      id  gender   age  hypertension  heart_disease  ever_married  \\\n",
       "0  15533    Male  46.0             0              0         False   \n",
       "1  59223    Male  48.0             0              0          True   \n",
       "2  16600    Male   9.0             0              0         False   \n",
       "3   7538  Female  55.0             0              0          True   \n",
       "4  55466  Female  69.0             0              1          True   \n",
       "\n",
       "       work_type Residence_type  avg_glucose_level   bmi   smoking_status  \\\n",
       "0        Private          Urban             107.59  26.2  formerly smoked   \n",
       "1        Private          Urban              68.13  38.0  formerly smoked   \n",
       "2       children          Rural              65.52  33.5          Unknown   \n",
       "3  Self-employed          Rural              94.75  27.9           smokes   \n",
       "4        Private          Urban             196.33  25.3     never smoked   \n",
       "\n",
       "   stroke  doctor  \n",
       "0       0       0  \n",
       "1       0       0  \n",
       "2       0       0  \n",
       "3       0       0  \n",
       "4       0       0  "
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "70a74b4f-1521-4e6d-ab9d-286be19e729e",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['id', 'gender', 'age', 'hypertension', 'heart_disease', 'ever_married',\n",
       "       'work_type', 'Residence_type', 'avg_glucose_level', 'bmi',\n",
       "       'smoking_status', 'stroke', 'doctor'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.columns\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "dee545e1-5291-4c8c-b0d7-4a83a88a26d3",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "def  get_X_y(train):\n",
    "    \n",
    "    FEATURES = [\n",
    "        'gender',\n",
    "        'age', \n",
    "        'hypertension', \n",
    "        'heart_disease', \n",
    "        'ever_married',\n",
    "        'work_type', \n",
    "        'Residence_type', \n",
    "        'avg_glucose_level', \n",
    "        'bmi',\n",
    "        'smoking_status'\n",
    "    ]\n",
    "\n",
    "    GROUPS = 'doctor'\n",
    "    TARGET = 'stroke'\n",
    "\n",
    "    X = train[FEATURES]\n",
    "    y = train[TARGET]\n",
    "    groups = train[GROUPS]\n",
    "    \n",
    "    return X, y, groups\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "bbb9dffa-9cfe-4876-b989-94295afba949",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[LightGBM] [Info] Number of positive: 223, number of negative: 4387\n",
      "[LightGBM] [Info] Auto-choosing row-wise multi-threading, the overhead of testing was 0.000107 seconds.\n",
      "You can set `force_row_wise=true` to remove the overhead.\n",
      "And if memory is not enough, you can set `force_col_wise=true`.\n",
      "[LightGBM] [Info] Total Bins 635\n",
      "[LightGBM] [Info] Number of data points in the train set: 4610, number of used features: 10\n",
      "[LightGBM] [Info] [binary:BoostFromScore]: pavg=0.048373 -> initscore=-2.979229\n",
      "[LightGBM] [Info] Start training from score -2.979229\n"
     ]
    }
   ],
   "source": [
    "X, y, groups = get_X_y(train)\n",
    "clf = lgb.LGBMClassifier(n_estimators=100)\n",
    "clf.fit(X, y)\n",
    "#Predict on training set\n",
    "pred = clf.predict(X)\n",
    "pred_proba = clf.predict_proba(X)[:, 1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "4867076c-7096-4199-b201-ca4989d69200",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([9.99517113e-04, 8.48446300e-04, 9.17556595e-05, ...,\n",
       "       8.77901498e-05, 1.43738858e-03, 6.01832867e-04])"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pred_proba"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "660e9488-a4de-4815-92f6-535e270970b3",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The score on the training set is accuracy: 0.9911, and AUC of 0.9997\n"
     ]
    }
   ],
   "source": [
    "acc_score = accuracy_score(y, pred)\n",
    "auc_score = roc_auc_score(y, pred_proba)\n",
    "\n",
    "print(f'The score on the training set is accuracy: {acc_score:0.4f}, and AUC of {auc_score:0.4f}')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bb93f3a0-6cbb-4312-8005-4859960c2c51",
   "metadata": {},
   "source": [
    "Check on a holdout set"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "ada69ba5-bf28-4289-ad7b-766eb8b31df3",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy on holdout set is: 0.9380, and AUC of 0.7802\n"
     ]
    }
   ],
   "source": [
    "# X_holdout = holdout[FEATURES]\n",
    "# y_holdout = holdout[TARGET]\n",
    "\n",
    "X_holdout, y_holdout, groups_holdout = get_X_y(holdout)\n",
    "pred = clf.predict(X_holdout)\n",
    "pred_proba = clf.predict_proba(X_holdout)[:, 1]\n",
    "\n",
    "acc_score = accuracy_score(y_holdout, pred)\n",
    "auc_score = roc_auc_score(y_holdout, pred_proba)\n",
    "\n",
    "print(f'Accuracy on holdout set is: {acc_score:0.4f}, and AUC of {auc_score:0.4f}')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9632d8e5-adbf-4998-b399-0d8b0f53ce83",
   "metadata": {},
   "source": [
    "Baseline \n",
    "\n",
    "Predicting all zeros"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "ccd25d38-6f00-4b57-8a05-2ac3015a8109",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.9516268980477224, 0.5)"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "accuracy_score(y, np.zeros_like(y)), roc_auc_score(y, np.zeros_like(y))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "3bf68eda-ff07-4cd7-92f1-a4184ed2921b",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[LightGBM] [Info] Number of positive: 203, number of negative: 3946\n",
      "[LightGBM] [Info] Auto-choosing row-wise multi-threading, the overhead of testing was 0.000110 seconds.\n",
      "You can set `force_row_wise=true` to remove the overhead.\n",
      "And if memory is not enough, you can set `force_col_wise=true`.\n",
      "[LightGBM] [Info] Total Bins 635\n",
      "[LightGBM] [Info] Number of data points in the train set: 4149, number of used features: 10\n",
      "[LightGBM] [Info] [binary:BoostFromScore]: pavg=0.048927 -> initscore=-2.967252\n",
      "[LightGBM] [Info] Start training from score -2.967252\n",
      "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
      "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
      "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
      "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
      "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
      "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
      "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
      "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
      "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
      "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
      "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
      "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
      "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
      "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
      "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
      "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
      "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
      "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
      "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
      "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
      "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
      "[LightGBM] [Warning] No further splits with positive gain, best gain: -inf\n",
      "Our accuracy on val set is: 0.9566, and AUC of 0.8227\n"
     ]
    }
   ],
   "source": [
    "X, y, groups = get_X_y(train)\n",
    "X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.1)\n",
    "\n",
    "clf = lgb.LGBMClassifier(n_estimators=100, max_depth=3)\n",
    "clf.fit(X_train, y_train)\n",
    "\n",
    "pred = clf.predict(X_val)\n",
    "pred_proba = clf.predict_proba(X_val)[:, 1]\n",
    "\n",
    "acc_score = accuracy_score(y_val, pred)\n",
    "auc_score = roc_auc_score(y_val, pred_proba)\n",
    "\n",
    "print(f'Our accuracy on val set is: {acc_score:0.4f}, and AUC of {auc_score:0.4f}')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c33fccca-bfe3-440b-bf58-12ff6d2a7a54",
   "metadata": {},
   "source": [
    "Cross Validation"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a234a5f1-0f64-4eef-ba8d-88e0e83b8589",
   "metadata": {},
   "source": [
    "KFold"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "3763227e-6f68-463d-8ee8-23bb3c31e66b",
   "metadata": {},
   "outputs": [],
   "source": [
    "kf = KFold()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "360cd48f",
   "metadata": {},
   "outputs": [],
   "source": [
    "from matplotlib.patches import Patch\n",
    "cmap_data = plt.cm.Paired\n",
    "cmap_cv = plt.cm.coolwarm\n",
    "\n",
    "def visualize_groups(classes, groups, name):\n",
    "    # Visualize dataset groups\n",
    "    fig, ax = plt.subplots()\n",
    "    ax.scatter(\n",
    "        range(len(groups)),\n",
    "        [0.5] * len(groups),\n",
    "        c=groups,\n",
    "        marker=\"_\",\n",
    "        lw=50,\n",
    "        cmap=cmap_data,\n",
    "    )\n",
    "    ax.scatter(\n",
    "        range(len(groups)),\n",
    "        [3.5] * len(groups),\n",
    "        c=classes,\n",
    "        marker=\"_\",\n",
    "        lw=50,\n",
    "        cmap=cmap_data,\n",
    "    )\n",
    "    ax.set(\n",
    "        ylim=[-1, 5],\n",
    "        yticks=[0.5, 3.5],\n",
    "        yticklabels=[\"Data\\ngroup\", \"Data\\nclass\"],\n",
    "        xlabel=\"Sample index\",\n",
    "    )\n",
    "\n",
    "\n",
    "def plot_cv_indices(cv, X, y, group, ax, n_splits, lw=25):\n",
    "    \"\"\"Create a sample plot for indices of a cross-validation object.\"\"\"\n",
    "\n",
    "    # Generate the training/testing visualizations for each CV split\n",
    "    for ii, (tr, tt) in enumerate(cv.split(X=X, y=y, groups=group)):\n",
    "        # Fill in indices with the training/test groups\n",
    "        indices = np.array([np.nan] * len(X))\n",
    "        indices[tt] = 1\n",
    "        indices[tr] = 0\n",
    "\n",
    "        # Visualize the results\n",
    "        ax.scatter(\n",
    "            range(len(indices)),\n",
    "            [ii + 0.5] * len(indices),\n",
    "            c=indices,\n",
    "            marker=\"_\",\n",
    "            lw=lw,\n",
    "            cmap=cmap_cv,\n",
    "            vmin=-0.2,\n",
    "            vmax=1.2,\n",
    "        )\n",
    "\n",
    "    # Plot the data classes and groups at the end\n",
    "    ax.scatter(\n",
    "        range(len(X)), [ii + 1.5] * len(X), c=y, marker=\"_\", lw=lw, cmap=cmap_data\n",
    "    )\n",
    "\n",
    "    ax.scatter(\n",
    "        range(len(X)), [ii + 2.5] * len(X), c=group, marker=\"_\", lw=lw, cmap=cmap_data\n",
    "    )\n",
    "\n",
    "    # Formatting\n",
    "    yticklabels = list(range(n_splits)) + [\"class\", \"group\"]\n",
    "    ax.set(\n",
    "        yticks=np.arange(n_splits + 2) + 0.5,\n",
    "        yticklabels=yticklabels,\n",
    "        xlabel=\"Sample index\",\n",
    "        ylabel=\"CV iteration\",\n",
    "        ylim=[n_splits + 2.2, -0.2],\n",
    "        xlim=[0, 100],\n",
    "    )\n",
    "    ax.set_title(\"{}\".format(type(cv).__name__), fontsize=15)\n",
    "    return ax\n",
    "\n",
    "\n",
    "def plot_cv(cv, X, y, groups, n_splits=5):\n",
    "    this_cv = cv(n_splits=n_splits)\n",
    "    fig, ax = plt.subplots(figsize=(15, 5))\n",
    "    plot_cv_indices(this_cv, X, y, groups, ax, n_splits)\n",
    "\n",
    "    ax.legend(\n",
    "        [Patch(color=cmap_cv(0.8)), Patch(color=cmap_cv(0.02))],\n",
    "        [\"Testing set\", \"Training set\"],\n",
    "        loc=(1.02, 0.8),\n",
    "    )\n",
    "    plt.tight_layout()\n",
    "    fig.subplots_adjust(right=0.7)\n",
    "    plt.show()\n",
    "    \n",
    "def get_fake_X_y():\n",
    "    # Fake Generate the class/group data for an example\n",
    "    n_points = 100\n",
    "    X_ = np.random.randn(100, 10)\n",
    "\n",
    "    percentiles_classes = [0.1, 0.9]\n",
    "    y_ = np.hstack([[ii] * int(100 * perc) for ii, perc in enumerate(percentiles_classes)])\n",
    "\n",
    "    # Evenly spaced groups repeated once\n",
    "    groups_ = np.hstack([[ii] * 10 for ii in range(10)])\n",
    "    return X_, y_, groups_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "4a420ec4-0294-437d-b663-278557820ae6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABLQAAAHqCAYAAAAd5xeDAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABRK0lEQVR4nO3dd3hUddrG8XvSJmWSCaEkQYKhE6RIEaUoVYMgAhYUUUBZdN0gICASXUBEDTYUhJXVXQFdFEQFXUGRXmKDUESlSBN2pUibkESSkDnvH2zmNUImE5hkcpjv57rmgjnnOb/nybw5uLnfc04shmEYAgAAAAAAAEwiwNcDAAAAAAAAAKVBoAUAAAAAAABTIdACAAAAAACAqRBoAQAAAAAAwFQItAAAAAAAAGAqBFoAAAAAAAAwFQItAAAAAAAAmAqBFgAAAAAAAEyFQAsAAAAAAACmQqAFAAC8zmKxyGKxXHDf2bNnddddd8lisahu3bo6ePCgJGn27Nmu44p7zZ49+6JnKlz/qaeeKvXXkpiYeNF9AQAA4H1Bvh4AAAD4j7Nnz6pfv3764IMPVK9ePa1atUpXXHFFkZo6deqoffv2Fzy+bt265TEmAAAAKjgCLQAAUC7y8/N1991366OPPlKDBg20cuVKVa9e/by69u3bX9KVWAAAALj8EWgBAIAyl5+fr759+2rRokVKSkrSypUrFRcX5+uxAAAAYFI8QwsAAJSpvLw83XnnnVq0aJGuuuoqrV692mth1pIlS3TjjTeqUqVKCg0NVYMGDTR27FidOnWqVOucOHFCQ4cOVfXq1RUaGqpGjRpp6tSpMgzDK3MCAADAu7hCCwAAlJm8vDzdcccd+ve//62mTZtq+fLlqlq1qlfWTktL0xNPPKGgoCB16NBBVapUUXp6up5//nktXLhQa9euVWxsbInrnDx5Uu3bt9f27dsVFxenXr166cSJExo9erR2797tlVkBAADgXQRaAACgzNx2221avHixrr76ai1fvlyVK1f2yrobNmzQX//6V9lsNi1fvlzXXnutJCk3N1f33XefFixYoJSUFH3wwQclrvXEE09o+/bt6tatmz788EOFh4dLkr799lt16dLFK/MCAADAu7jlEAAAlJnFixfLYrHonXfe8TjMmjNnjiwWy3mvjh07umqmT58up9OpRx55xBVmSZLVatX06dMVFhamhQsX6uDBg257ZWdna86cOQoICND06dNdYZYktW7dWikpKaX7ggEAAFAuuEILAACUmXbt2ik9PV133XWX1qxZoypVqpR4TJ06ddS+ffvztjds2ND193Xr1kmS+vfvf15dtWrVdNNNN+njjz9Wenq67r777mJ7ZWRk6LffflPr1q1Vp06d8/b369dPzz//fIkzAwAAoHwRaAEAgDKzePFide7cWZs2bVK3bt20cuVKRUVFuT2mffv2mj17ttuaX375RZKUmJh4wf2F2//73/96tM6VV17pdh0AAABULNxyCAAAyozdbtfSpUvVqFEjZWRkqEePHsrJySnzvhaLpcx7AAAAwHcItAAAQJmqUqWKli9frjp16mj9+vXq06eP8vLyLmnN6tWrS5J+/vnnC+7fv3+/JOmKK65wu058fLzbdYrbDgAAAN8i0AIAAGUuPj5ey5cvV40aNfTFF1/o7rvvVkFBwUWvd/3110uS3nvvvfP2/frrr1q6dKksFovatWvndp2WLVsqLCxMGRkZ2rt373n7582bd9EzAgAAoOwQaAEAgHKRmJio5cuXq1q1alq4cKEGDRokwzAuaq2UlBQFBARo2rRp2rhxo2t7Xl6eHnnkEf3222+67bbblJCQ4HYdm82m++67TwUFBa7jCm3cuFHTp0+/qPkAAABQtgi0AABAuWnQoIG++OILVapUSf/617+UkpJyUeu0bt1akyZNUmZmptq0aaMbb7xR/fr1U926dTV//nzVq1dPM2bM8GittLQ0NWjQQEuWLFGdOnV09913Kzk5WW3atNGAAQMuaj4AAACULQItAABQrpo1a6bPPvtMNptNr7/+usaMGXNR6zzxxBP69NNP1aFDB23YsEEfffSRrFarxowZo2+++UaxsbEerRMTE6P09HQ9/PDDMgxDixYt0oEDBzR58mS99tprFzUbAAAAypbFuNhr/QEAAAAAAAAf4AotAAAAAAAAmAqBFgAAAAAAAEyFQAsAAAAAAACmQqAFAAAAAAAAUyHQAgAAAAAAgKkQaAEAAAAAAMBUgnw9gJk5nU798ssvioyMlMVi8fU4AAAAAACUG8MwdPr0aVWvXl0BAVwvg/JFoHUJfvnlFyUkJPh6DAAAAAAAfObgwYOqUaOGr8eAnyHQugSRkZGSzp28UVFRPp4GAAAAAIDyk5mZqYSEBNfPxkB5ItC6BIW3GUZFRRFoAQAAAAD8Eo/ggS9wkysAAAAAAABMhUALAAAAAAAApkKgBQAAAAAAAFMh0AIAAAAAAICpEGgBAAAAAADAVAi0AAAAAAAAYCoEWgAAAAAAADAVAi0AAAAAAACYCoEWAAAAAAAATIVACwAAAAAAAKZCoAUAAAAAAABTIdACAAAAAACAqRBoAQAAAAAAwFQItAAAAAAAAGAqBFoAAAAAAAAwFQItAAAAAAAAmAqBFgAAAAAAAEyFQAsAAAAAAACmEuTrAS4Hh58bpWxriCTJ1rG7JClr9RK3x3hSZ+vYXZGdeuj0qsUl1pm9pzfX8pfPzFc9V248o1UZucXWdWpplSS3NZ7WdWppVedWofQso57eXMtfPjN60vNSe3pzLX/5zOhJz0vt6c21/OUzoyc9S1oPqAgItLzg7LEjOhsSLElyZmed2/brYbfHeFJXWOPMzvKozuw9zT6/v/TMPmPo11POYuuyzxiS5LbG07rCGnqWXU+zz09Pepqxp9nnpyc9zdjT7PPTk54VrSdQEXDLIQAAAAAAAEyFQAsAAAAAAACmQqAFAAAAAAAAUyHQAgAAAAAAgKkQaAEAAAAAAMBUCLQAAAAAAABgKgRaAAAAAAAAMBUCLQAAAAAAAJgKgRYAAAAAAABMhUALAAAAAAAApkKgBQAAAAAAAFMJ8vUAvjZjxgy9+OKLOnz4sJo1a6bXXntNrVu39vVYAAAAAAD4pYKCAuXn5/t6DPhAcHCwAgMDPar160Br/vz5GjlypGbOnKlrr71Wr776qpKTk7Vz505Vq1bN1+MBAAAAAOA3DMPQ4cOHderUKV+PAh+Kjo5WXFycLBaL2zq/DrSmTJmiIUOG6P7775ckzZw5U4sXL9Zbb72lsWPH+ng6AAAAAAD8R2GYVa1aNYWHh5cYaODyYhiGcnJydPToUUlSfHy823q/DbTy8vKUkZGh1NRU17aAgAB17dpVX3311QWPyc3NVW5urut9ZmZmmc8JAAAAAMDlrqCgwBVmVa5c2dfjwEfCwsIkSUePHlW1atXc3n7otw+FP3bsmAoKChQbG1tke2xsrA4fPnzBY9LS0mS3212vhISE8hgVAAAAAIDLWuEzs8LDw308CXyt8HugpOeo+W2gdTFSU1PlcDhcr4MHD/p6JAAAAAAALhvcZghPvwf8NtCqUqWKAgMDdeTIkSLbjxw5ori4uAseY7VaFRUVVeQFAAAAAABQHp566ildffXVvh6jQvDbZ2iFhISoZcuWWrFihXr37i1JcjqdWrFihYYOHerb4QAAAAAAgCTJ6TghZ05WufULCLcpwB7jUW1JVxNNmDBBTz311EXNYbFYtHDhQldmIUmjR4/WI488clHrlacLze5tfhtoSdLIkSM1cOBAtWrVSq1bt9arr76q7Oxs1289BAAAAAAAvuN0nJDj9QlSwdnyaxoYJPvDEz0KtQ4dOuT6+/z58zV+/Hjt3LnTtc1ms3l1NJvN5vU1zcpvbzmUpLvuuksvvfSSxo8fr6uvvlpbtmzR559/ft6D4gEAAAAAQPlz5mSVb5glSQVnPb4iLC4uzvWy2+2yWCxFts2bN09JSUkKDQ1Vw4YN9be//c11bF5enoYOHar4+HiFhobqyiuvVFpamiQpMTFRktSnTx9ZLBbX+z/ecjho0CD17t1bL730kuLj41W5cmWlpKQUeaD6oUOH1KNHD4WFhalWrVp69913lZiYqFdffbXYr2v16tVq3bq1IiIiFB0drXbt2unnn3927f/444/VokULhYaGqnbt2po4caLOnj3rdnZv8+srtCRp6NCh3GIIAAAAAAC8au7cuRo/frymT5+u5s2ba/PmzRoyZIgiIiI0cOBATZs2TZ988onef/991axZUwcPHnT98rkNGzaoWrVqmjVrlrp166bAwMBi+6xatUrx8fFatWqVdu/erbvuuktXX321hgwZIkkaMGCAjh07ptWrVys4OFgjR47U0aNHi13v7Nmz6t27t4YMGaL33ntPeXl5+vbbb123V65bt04DBgzQtGnTdP3112vPnj168MEHJZ27xbI0s18Kvw+0AAAAAAAAvG3ChAl6+eWXddttt0mSatWqpR9//FF///vfNXDgQB04cED16tVT+/btZbFYdOWVV7qOrVq1qiQpOjq62F9cV6hSpUqaPn26AgMD1bBhQ/Xo0UMrVqzQkCFDtGPHDi1fvlwbNmxQq1atJEn/+Mc/VK9evWLXy8zMlMPh0C233KI6depIkpKSklz7J06cqLFjx2rgwIGSpNq1a2vSpEkaM2aMJkyYUKrZLwWBFgAAAAAAgBdlZ2drz549Gjx4sOtKKenc1U92u13SudsFb7zxRjVo0EDdunXTLbfcoptuuqnUva666qoiV0HFx8dr27ZtkqSdO3cqKChILVq0cO2vW7euKlWqVOx6MTExGjRokJKTk3XjjTeqa9eu6tu3r+Lj4yVJW7duVXp6up599lnXMQUFBTpz5oxycnIUHh5e6q/hYhBoAQAAAAAAeFFW1rlncL355pu69tpri+wrDJ9atGihffv26bPPPtPy5cvVt29fde3aVR988EGpegUHBxd5b7FY5HQ6L2F6adasWRo2bJg+//xzzZ8/X3/961+1bNkyXXfddcrKytLEiRNdV579Xmho6CX1LQ0CLQAAAAAAAC+KjY1V9erVtXfvXvXv37/YuqioKN1111266667dMcdd6hbt246ceKEYmJiFBwcrIKCgkuao0GDBjp79qw2b96sli1bSpJ2796tkydPlnhs8+bN1bx5c6WmpqpNmzZ69913dd1116lFixbauXOn6tatW+yx3pi9JARaAAAAAAAAXjZx4kQNGzZMdrtd3bp1U25urjZu3KiTJ09q5MiRmjJliuLj49W8eXMFBARowYIFiouLU3R0tKRzvy1wxYoVateunaxWq9vbBIvTsGFDde3aVQ8++KBef/11BQcHa9SoUQoLC3M95P2P9u3bpzfeeEO33nqrqlevrp07d+qnn37SgAEDJEnjx4/XLbfcopo1a+qOO+5QQECAtm7dqu+//17PPPOM12YvSYDXVwQAAAAAAPBzf/rTn/SPf/xDs2bNUpMmTdShQwfNnj1btWrVkiRFRkbqhRdeUKtWrXTNNddo//79WrJkiQICzkU1L7/8spYtW6aEhAQ1b978oud4++23FRsbqxtuuEF9+vTRkCFDFBkZWeztgeHh4dqxY4duv/121a9fXw8++KBSUlL00EMPSZKSk5P16aef6osvvtA111yj6667Tq+88kqRh9p7a3Z3uEILAAAAAABUSAHhNikwSCo4W35NA4PO9S2lQYMGadCgQUW23XPPPbrnnnsuWD9kyJAiD4z/o549e6pnz55Ftj311FN66qmnXO9nz5593nGvvvpqkffx8fFasmSJ6/1//vMfHT16tNhbBmNjY7Vw4cJi55LOhVrJycmlmt3bCLQAAAAAAECFFGCPkf3hiXLmZJVfz3CbAuwx5davrK1cuVJZWVlq0qSJDh06pDFjxigxMVE33HCDr0e7JARaAAAAAACgwgqwx1xWAVN5y8/P1xNPPKG9e/cqMjJSbdu21dy5c8/77YhmQ6AFAAAAAABwmSrp9kCzItDygqAqsQqyhkiSAiLO3WcbVDXO7TGe1BXWBETYPKoze0+zz+8vPSNCLaoaXfzvk4gIPfebMtzVeFpXWEPPsutp9vnpSU8z9jT7/PSkpxl7mn1+etKzovUEKgKLYRiGr4cwq8zMTNntdjkcDkVFRfl6HAAAAAAAyo03fyY+c+aM9u3bp1q1ahX72/fgHzz9XnAfvwIAAAAAAAAVDIEWAAAAAAAATIVACwAAAAAAAKZCoAUAAAAAAABTIdACAAAAAACoQBITE/Xqq696XL969WpZLBadOnWqzGaqaIJ8PQAAAAAAAEBxjhzLlSPzbLn1s0cFKbaK1aNai8Xidv+ECRP01FNPlXqGDRs2KCIiwuP6tm3b6tChQ7Lb7aXuVZ46duyoq6++ulRhXXEItAAAAAAAQIV05FiuBgzfqrx8o9x6hgRb9PbUZh6FWocOHXL9ff78+Ro/frx27tzp2maz2Vx/NwxDBQUFCgoqOYqpWrVq6WYOCVFcXFypjjE7bjkEAAAAAAAVkiPzbLmGWZKUl294fEVYXFyc62W322WxWFzvd+zYocjISH322Wdq2bKlrFar1q9frz179qhXr16KjY2VzWbTNddco+XLlxdZ94+3HFosFv3jH/9Qnz59FB4ernr16umTTz5x7f/jLYezZ89WdHS0li5dqqSkJNlsNnXr1q1IAHf27FkNGzZM0dHRqly5sh5//HENHDhQvXv3Lvbr/fnnn9WzZ09VqlRJERERuuqqq7RkyRLX/u+//14333yzbDabYmNjdd999+nYsWOSpEGDBmnNmjWaOnWqLBaLLBaL9u/f79HnfCEEWgAAAAAAAGVk7Nixmjx5srZv366mTZsqKytL3bt314oVK7R582Z169ZNPXv21IEDB9yuM3HiRPXt21ffffedunfvrv79++vEiRPF1ufk5Oill17SO++8o7Vr1+rAgQMaPXq0a//zzz+vuXPnatasWUpPT1dmZqYWLVrkdoaUlBTl5uZq7dq12rZtm55//nnXVWinTp1S586d1bx5c23cuFGff/65jhw5or59+0qSpk6dqjZt2mjIkCE6dOiQDh06pISEBA8/xfNxyyEAAAAAAEAZefrpp3XjjTe63sfExKhZs2au95MmTdLChQv1ySefaOjQocWuM2jQIPXr10+S9Nxzz2natGn69ttv1a1btwvW5+fna+bMmapTp44kaejQoXr66add+1977TWlpqaqT58+kqTp06cXudrqQg4cOKDbb79dTZo0kSTVrl3btW/69Olq3ry5nnvuOde2t956SwkJCdq1a5fq16+vkJAQhYeHe+X2SK7QAgAAAAAAKCOtWrUq8j4rK0ujR49WUlKSoqOjZbPZtH379hKv0GratKnr7xEREYqKitLRo0eLrQ8PD3eFWZIUHx/vqnc4HDpy5Ihat27t2h8YGKiWLVu6nWHYsGF65pln1K5dO02YMEHfffeda9/WrVu1atUq2Ww216thw4aSpD179rhd92IQaAEAAAAAAJSRP/62wtGjR2vhwoV67rnntG7dOm3ZskVNmjRRXl6e23WCg4OLvLdYLHI6naWqN4xLex7Zn/70J+3du1f33Xeftm3bplatWum1116TdC6o69mzp7Zs2VLk9dNPP+mGG264pL4XQqAFAAAAAABQTtLT0zVo0CD16dNHTZo0UVxc3CU9HP1i2O12xcbGasOGDa5tBQUF2rRpU4nHJiQk6M9//rM++ugjjRo1Sm+++aYkqUWLFvrhhx+UmJiounXrFnkVhnohISEqKCjwytdAoAUAAAAAAFBO6tWrp48++khbtmzR1q1bdc8997i90qqsPPLII0pLS9PHH3+snTt3avjw4Tp58qQsFkuxx4wYMUJLly7Vvn37tGnTJq1atUpJSUmSzj0w/sSJE+rXr582bNigPXv2aOnSpbr//vtdIVZiYqK++eYb7d+/X8eOHbukr5tACwAAAAAAoJxMmTJFlSpVUtu2bdWzZ08lJyerRYsW5T7H448/rn79+mnAgAFq06aNbDabkpOTFRoaWuwxBQUFSklJUVJSkrp166b69evrb3/7mySpevXqSk9PV0FBgW666SY1adJEI0aMUHR0tAICzsVPo0ePVmBgoBo1aqSqVauW+NwwdyzGpd5A6ccyMzNlt9vlcDgUFRXl63EAAAAAACg33vyZ+MyZM9q3b59q1apVJFA5cixXA4ZvVV5++UUXIcEWvT21mWKrWMutZ0XgdDqVlJSkvn37atKkST6bo7jvhT8KKseZAAAAAAAAPBZbxaq3pzaTI/NsufW0RwX5RZj1888/64svvlCHDh2Um5ur6dOna9++fbrnnnt8PZpHCLQAAAAAAECF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0dEaPHiwsrKyyvGrgD8g0LoI8+fP18iRIzVhwgRt2rRJzZo1U3Jyso4ePerr0QCvW7NmjVJSUvT1119r2bJlys/P10033aTs7GxXzaOPPqp///vfWrBggdasWaNffvlFt912mw+nBsrGhg0b9Pe//11NmzYtsp1zAJezkydPql27dgoODtZnn32mH3/8US+//LIqVarkqnnhhRc0bdo0zZw5U998840iIiKUnJysM2fO+HBywDuef/55vf7665o+fbq2b9+u559/Xi+88IJee+01Vw3nAC4n2dnZatasmWbMmHHB/Z58v/fv318//PCDli1bpk8//VRr167Vgw8+WF5fAvyFgVJr3bq1kZKS4npfUFBgVK9e3UhLS/PhVED5OHr0qCHJWLNmjWEYhnHq1CkjODjYWLBggatm+/bthiTjq6++8tWYgNedPn3aqFevnrFs2TKjQ4cOxvDhww3D4BzA5e/xxx832rdvX+x+p9NpxMXFGS+++KJr26lTpwyr1Wq899575TEiUKZ69OhhPPDAA0W23XbbbUb//v0Nw+AcwOVNkrFw4ULXe0++33/88UdDkrFhwwZXzWeffWZYLBbjv//9b7nNjssfV2iVUl5enjIyMtS1a1fXtoCAAHXt2lVfffWVDycDyofD4ZAkxcTESJIyMjKUn59f5Jxo2LChatasyTmBy0pKSop69OhR5Htd4hzA5e+TTz5Rq1atdOedd6patWpq3ry53nzzTdf+ffv26fDhw0XOAbvdrmuvvZZzAJeFtm3basWKFdq1a5ckaevWrVq/fr1uvvlmSZwD8C+efL9/9dVXio6OVqtWrVw1Xbt2VUBAgL755ptynxmXryBfD2A2x44dU0FBgWJjY4tsj42N1Y4dO3w0FVA+nE6nRowYoXbt2qlx48aSpMOHDyskJETR0dFFamNjY3X48GEfTAl437x587Rp0yZt2LDhvH2cA7jc7d27V6+//rpGjhypJ554Qhs2bNCwYcMUEhKigQMHur7PL/S/jTgHcDkYO3asMjMz1bBhQwUGBqqgoEDPPvus+vfvL0mcA/Arnny/Hz58WNWqVSuyPygoSDExMZwT8CoCLQAeS0lJ0ffff6/169f7ehSg3Bw8eFDDhw/XsmXLFBoa6utxgHLndDrVqlUrPffcc5Kk5s2b6/vvv9fMmTM1cOBAH08HlL33339f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",
      "text/plain": [
       "<Figure size 1500x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "X_, y_, groups_ = get_fake_X_y()\n",
    "plot_cv(KFold, X_, y_, groups_)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e6c877bc",
   "metadata": {},
   "source": [
    "Stratified KFold"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "c9a4da26",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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+GG+usJUr15d0dHROn78uFatWnXR+oULF17yjAAAAGUdgRYAAGXMmDFj9Nhjj2nv3r0Xrfv999/1wAMPSLpwg/e8UKly5cqSpJ07d15Sz7p160qSXnvttXyB2po1azR58uQCt7ncnsXxwAMPqFKlSpo0aZJee+01+yWIec6fP6/ly5fr559/ti978MEHJUnTp0/Xtm3b7MszMjL0yCOPFOsSynLlyunrr79W3bp1tW7dOt1yyy06e/bsJb2WgQMHKjAwUAsXLrT/JUXpwmWV//73v/X777+radOmRd4vTJL9pu8jR47UqVOn7Mv37dunp59++pLmAwAAMAMCLQAAypj09HS9+OKLql27turVq6devXqpT58+uuGGG1SjRg2tX79etWvX1vTp0+3b5P31wg4dOqhPnz667777NHr0aKd7Dh06VMHBwXrllVcUFxenPn366MYbb1SbNm3swdA/tWjRQpUqVdLixYvVtm1bDRgwQPfdd5++//77y3r9BQkLC9Mnn3wim82mBx54QDExMerSpYv69u2rDh06qGLFioqPj7efvSZJrVq10qhRo5SSkqJrr71W8fHxuvPOO1WrVi3t2rVL3bt3L9YMERER+uabb1S9enV9++236t279yWdnVatWjW9+uqrys3NVffu3XXDDTforrvuUoMGDTRlyhRFRETonXfecWpfI0eOVOvWrbVp0ybVrl1bt99+u7p37664uDg1bty40D8CAAAAYHYEWgAAlDH/+c9/9Pbbb+vuu++Wv7+/1qxZo8WLF+vXX39V8+bNNWnSJG3dujXfPZaGDh2q//znP7Jarfroo4/05ptvFuuSs7p162rjxo3q3r27Tpw4oU8//VTp6el69dVXCz1DKyAgQMuWLVOnTp20detWzZ8/X2+++aZ27dp12e9BQVq0aKHt27fr8ccfV2hoqFatWqWlS5fq4MGDatOmjebPn6+OHTvm22by5Ml6/fXXFRsbq+TkZCUnJ6tTp05at26dwsPDiz1DdHS0Vq5cqaioKH322We65557LjpbzBn33HOP1qxZo27dumnHjh1avHixzpw5o4ceekibNm1y+ub2fn5++vrrr5WYmKiQkBB99tln+vnnn/Xoo4/qo48+4gbzAADgimUx3PkniwAAAAAAAIBi4gwtAAAAAAAAmAqBFgAAAAAAAEyFQAsAAAAAAACm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lSunmTNnytvbW/Xr11fXrl21cuVKDRo0SL/99pu++eYbbdiwQc2aNZMkvfHGG6pTp06h+0tLS1Nqaqq6deumWrVqSZJiY2Pt68ePH6/Ro0crISFBklSzZk0988wzevzxxzV27NhizX45CLQAAAAAAABcKCMjQ3v37tXAgQPtZ0pJF85+stlski5cLtipUyfVq1dP8fHx6tatm2666aZi97rqqqvynQUVFRWl7du3S5J27twpHx8fNWnSxL6+du3aKleuXKH7Cw8PV//+/dW5c2d16tRJHTt2VO/evRUVFSVJ2rZtm9auXavnnnvOvk1OTo7Onj2rzMxMBQUFFfs1XAoCLQAAAAAAABdKT79wD67XX39d1113Xb51eeFTkyZNtH//fn355Zf65ptv1Lt3b3Xs2FGLFy8uVi9fX998zy0Wi3Jzcy9jemnevHkaOnSovvrqKy1atEj/+c9/tGLFCrVo0ULp6ekaP368/cyzvwsICLisvsVBoAUAAAAAAOBCERERqly5svbt26e+ffsWWhcaGqo777xTd955p26//XbFx8fr1KlTCg8Pl6+vr3Jyci5rjnr16un8+fPasmWLmjZtKknas2eP/vrrryK3bdy4sRo3bqzExES1bNlS7733nlq0aKEmTZpo586dql27dqHbumL2ohBoAQAAAAAAuNj48eM1dOhQ2Ww2xcfHKysrSxs3btRff/2lESNGaOrUqYqKilLjxo3l5eWlDz/8UJGRkQoLC5N04a8Frly5Uq1bt5a/v7/DywQLU79+fXXs2FH333+/Zs+eLV9fX40cOVKBgYH2m7z/0/79+/Xaa6/plltuUeXKlbVz507t3r1b/fr1kyQ99dRT6tatm6pVq6bbb79dXl5e2rZtm37++Wc9++yzLpu9KF4u3yMAAAAAAICHu++++/TGG29o3rx5uvrqq9WmTRvNnz9fNWrUkCSFhIRo0qRJatasma699lodOHBAX3zxhby8LkQ1U6ZM0YoVKxQdHa3GjRtf8hxvvfWWIiIidOONN6pXr14aNGiQQkJCCr08MCgoSL/99ptuu+021a1bV/fff78GDx6sBx54QJLUuXNnff755/r666917bXXqkWLFpo2bVq+m9q7anZHOEMLAAAAAACUSV5BVsnbR8o5X3pNvX0u9C2m/v37q3///vmW3XXXXbrrrrsKrB80aFC+G8b/U/fu3dW9e/d8y8aNG6dx48bZn8+fP/+i7aZPn57veVRUlL744gv78//+9786fvx4oZcMRkREaMmSJYXOJV0ItTp37lys2V2NQAsAAAAAAJRJXrZw2R4ar9zM9NLrGWSVly281PqVtG+//Vbp6em6+uqrdeTIET3++OOKiYnRjTfe6O7RLguBFgAAAAAAKLO8bOFXVMBU2s6dO6d///vf2rdvn0JCQtSqVSu9++67F/11RLMh0AIAAAAAALhCFXV5oFkRaLmAT4UI+fj7SZK8gi9cZ+tTMdLhNl7BVgUHWFQxrPD78gcHWOwfnalzVONsnTt7OrMvr2Crw/c27/13ts6Z/05F1dGTnkX1LMvHutn/3aAnPc3Y0+zz05OeZuxp9vnpSc+y1hMoCyyGYRjuHsKs0tLSZLPZlJqaqtDQUHePAwAAAABAqXHl78Rnz57V/v37VaNGjUL/+h48g7NfC47jVwAAAAAAAKCMIdACAAAAAACAqRBoAQAAAAAAwFQItAAAAAAAAGAqBFoAAAAAAABlSExMjKZPn+50fXJysiwWi1JSUkpsprLGx90DAAAAAAAAFObYiSylpp0vtX62UB9FVPB3qtZisThcP3bsWI0bN67YM2zYsEHBwcFO17dq1UpHjhyRzWYrdq/S1LZtW11zzTXFCusKQ6AFAAAAAADKpGMnstRv2DZlnzNKraefr0VvvdTIqVDryJEj9s8XLVqkp556Sjt37rQvs1qt9s8Nw1BOTo58fIqOYipWrFi8mf38FBkZWaxtzI5LDgEAAAAAQJmUmna+VMMsSco+Zzh9RlhkZKT9YbPZZLFY7M9/++03hYSE6Msvv1TTpk3l7++v7777Tnv37lWPHj0UEREhq9Wqa6+9Vt98802+/f7zkkOLxaI33nhDvXr1UlBQkOrUqaNPP/3Uvv6flxzOnz9fYWFhWr58uWJjY2W1WhUfH58vgDt//ryGDh2qsLAwlS9fXk888YQSEhLUs2fPQl/vwYMH1b17d5UrV07BwcG66qqr9MUXX9jX//zzz7r55ptltVoVERGhe+65RydOnJAk9e/fX6tWrdJLL70ki8Uii8WiAwcOOPU+F4RACwAAAAAAoISMHj1aEydO1I4dO9SwYUOlp6erS5cuWrlypbZs2aL4+Hh1795dhw4dcrif8ePHq3fv3vrpp5/UpUsX9e3bV6dOnSq0PjMzUy+++KLefvttrV69WocOHdKoUaPs61944QW9++67mjdvntauXau0tDQtXbrU4QyDBw9WVlaWVq9ere3bt+uFF16wn4WWkpKi9u3bq3Hjxtq4caO++uorHTt2TL1795YkvfTSS2rZsqUGDRqkI0eO6MiRI4qOjnbyXbwYlxwCAAAAAACUkKefflqdOnWyPw8PD1ejRo3sz5955hktWbJEn376qYYMGVLofvr3768+ffpIkp5//nnNmDFD69evV3x8fIH1586d05w5c1SrVi1J0pAhQ/T000/b17/88stKTExUr169JEkzZ87Md7ZVQQ4dOqTbbrtNV199tSSpZs2a9nUzZ85U48aN9fzzz9uXzZ07V9HR0dq1a5fq1q0rPz8/BQUFueTySM7QAgAAAAAAKCHNmjXL9zw9PV2jRo1SbGyswsLCZLVatWPHjiLP0GrYsKH98+DgYIWGhur48eOF1gcFBdnDLEmKioqy16empurYsWNq3ry5fb23t7eaNm3qcIahQ4fq2WefVevWrTV27Fj99NNP9nXbtm1TUlKSrFar/VG/fn1J0t69ex3u91IQaAEAAAAAAJSQf/61wlGjRmnJkiV6/vnntWbNGm3dulVXX321srOzHe7H19c333OLxaLc3Nxi1RvG5d2P7L777tO+fft0zz33aPv27WrWrJlefvllSReCuu7du2vr1q35Hrt379aNN954WX0LQqAFAAAAAABQStauXav+/furV69euvrqqxUZGXlZN0e/FDabTREREdqwYYN9WU5OjjZv3lzkttHR0XrwwQf18ccfa+TIkXr99dclSU2aNNEvv/yimJgY1a5dO98jL9Tz8/NTTk6OS14DgRYAAAAAAEApqVOnjj7++GNt3bpV27Zt01133eXwTKuS8sgjj2jChAn65JNPtHPnTg0bNkx//fWXLBZLodsMHz5cy5cv1/79+7V582YlJSUpNjZW0oUbxp86dUp9+vTRhg0btHfvXi1fvlz33nuvPcSKiYnRjz/+qAMHDujEiROX9boJtAAAAAAAAErJ1KlTVa5cObVq1Urdu3dX586d1aRJk1Kf44knnlCfPn3Ur18/tWzZUlarVZ07d1ZAQECh2+Tk5Gjw4MGKjY1VfHy86tatq1deeUWSVLlyZa1du1Y5OTm66aabdPXVV2v48OEKCwuTl9eF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sGCBvv32Wz3++OP5ajIzMzVjxgwtXLhQX331lZKTk9WrVy998cUX+uKLL/T222/r1VdftYc+eSZPnqxGjRppy5YtGj16tIYNG6YVK1YUOMe5c+fUuXNnhYSEaM2aNVq7dq09kMrOznb6dWdmZurFF1/U22+/rdWrV+vQoUMaNWqUff2UKVM0f/58zZ07V999951OnTqlJUuW5NvHhAkT9NZbb2nOnDn65Zdf9Oijj+ruu+/WqlWrZLFYtGDBAm3YsEEzZsyQJD344IOqUqUKgRYAAMDlMgAAgMdbvHixUa5cOSMgIMBo1aqVkZiYaGzbts3hNh9++KFRvnx5+/N58+YZkow9e/bYlz3wwANGUFCQcfr0afuyzp07Gw888ID9efXq1Y34+Ph8+77zzjuNm2++2f5ckrFkyRLDMAzj7bffNurVq2fk5uba12dlZRmBgYHG8uXLC5w1KSnJkGT89ddfhc46a9YsIyIiwv48KirKmDRpkv35uXPnjKpVqxo9evQwDMMwzp49awQFBRnff/99vl4DBw40+vTpY3/+wQcfGAEBAcbo0aON4OBgY9euXQXOCAAAAOdxhhYAANBtt92mP/74Q59++qni4+OVnJysJk2aaP78+faab775Rh06dFCVKlUUEhKie+65RydPnlRmZqa9JigoSLVq1bI/j4iIUExMjKxWa75lx48fz9e/ZcuWFz3fsWNHgbNu27ZNe/bsUUhIiP3ssvDwcJ09e1Z79+51+jX/c9aoqCj7XKmpqTpy5Iiuu+46+3ofHx81a9bM/nzPnj3KzMxUp06d7HNYrVa99dZb+ea444471KtXL02cOFEvvvii6tSp4/SMAAAAKBg3hQcAAJKkgIAAderUSZ06ddKYMWN03333aezYserfv78OHDigbt266aGHHtJzzz2n8PBwfffddxo4cKCys7MVFBQkSfL19c23T4vFUuCy3NzcS54zPT1dTZs21bvvvnvRuooVKzq9n4LmMv5xj6yi5pCkZcuWqUqVKvnW+fv72z/PzMzUpk2b5O3trd27dzu9fwAAABSOQAsAABSoQYMGWrp0qSRp06ZNys3N1ZQpU+TldeEE7w8++MBlvX744YeLnsfGxhZY26RJEy1atEiVKlVSaGioy2b4O5vNpqioKP3444+68cYbJUnnz5/Xpk2b1KRJE0kX3h9/f38dOnRIbdq0KXRfI0eOlJeXl7788kt16dJFXbt2Vfv27UtkbgAAAE9BoAUAgIc7efKk7rjjDg0YMEANGzZUSEiINm7cqEmTJqlHjx6SpNq1a+vcuXN6+eWX1b17d61du1Zz5sxx2Qxr167VpEmT1LNnT61YsUIffvihli1bVmBt3759NXnyZPXo0UNPP/20qlatqoMHD+rjjz/W448/rqpVq7pkpmHDhmnixImqU6eO6tevr6lTp9r/SqIkhYSEaNSoUXr00UeVm5ur66+/XqmpqVq7dq1CQ0OVkJCgZcuWae7cuVq3bp2aNGmixx57TAkJCfrpp59Urlw5l8wJAADgibiHFgAAHs5qteq6667TtGnTdOONNyouLk5jxozRoEGDNHPmTElSo0aNNHXqVL3wwguKi4vTu+++qwkTJrhshpEjR2rjxo1q3Lixnn32WU2dOlWdO3cusDYoKEirV69WtWrVdOuttyo2NlYDBw7U2bNnXXrG1siRI3XPPfcoISFBLVu2VEhIiHr16pWv5plnntGYMWM0YcIExcbGKj4+XsuWLVONGjX0559/auDAgRo3bpz9rK7x48crIiJCDz74oMvmBAAA8EQWozg3iwAAAHCxmJgYDR8+XMOHD3f3KAAAADAJztACAAAAAACAqRBoAQAAAAAAwFS45BAAAAAAAACmwhlaAAAAAAAAMBUCLQAAAAAAAJgKgRYAAAAAAABMhUALAAAAAAAApkKgBQAAAAAAAFMh0AIAAAAAAICpEGgBAAAAAADAVAi0AAAAAAAAYCoEWgAAAAAAADCV/wOHzW0xN65x2wAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1500x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "skf = StratifiedKFold()\n",
    "X_, y_, groups_ = get_fake_X_y()\n",
    "plot_cv(StratifiedKFold, X_, y_, groups_)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ca817ce5",
   "metadata": {},
   "source": [
    "# Group Kfold"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "d5fdc8dd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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1KmT4uPjdeTIESUlJXl07b/85S+S8g7L/v3vf+eok34Pbvbt23dV/ZkzZ7Rt2zaXPRcvXnzVts8++0xnzpxR1apV8/1tgjNnzlS/fv107tw53X777dqzZ4/Leleu5f3nt1Zu72/Pnj1cbggAAOACgRYAACWMn5+f3nnnHVmtVo0bN05jxoxRSkrKVXWnT5/W3r17C7R2mzZtVK9ePR0+fFjjx4+XYRjO15YtW6alS5fKZrNp4MCBzu1VqlRRpUqVtGvXLn344YfO7enp6XrooYeUmprqsufEiROdZz5JV+4N9sQTT0iShgwZku/MFotFs2fPVs+ePfXrr7+qQ4cOOdYriGt5/3l55JFHJEmvvPKKdu7c6dyenp6uxx57LMfaAAAAyIlACwCAEqhRo0b6/PPPFRMTo6lTpyo6OlqtW7dWnz591KNHDzVp0kSxsbFau3atatWqpcaNG7u1rsVi0fz581W6dGk9//zzqlOnju699161bNlSPXv2lJ+fn/71r39dddbUhAkTJEm9evVSu3bt1LVrV1WrVk3ffvutunXrlme/SpUqqX79+qpTp466du2qXr16qUaNGvr222/Vtm1bDRs2zK25/f399e677yohIUE///yz2rdv77wpe0Fc6/vPTfPmzTV69GidO3dOTZo0UUJCgu655x5Vq1ZN+/bty/W3TAIAAOAKAi0AAEqoli1b6sCBA3r11VfVsmVL7d27V++//74+//xznT9/Xr1799ayZcu0a9cu1a1b1+1169Wrp23btmnw4MFKS0vTe++9p71796p79+5KTk5W7969r9pn4MCBmjNnjuLj45WcnKxvvvlGXbp00aZNmxQZGZlnL4vFovfee08jRozQrl279PHHH8tut+upp57S8uXLFRDg/i9sDgoK0tKlS9W6dWsdPHhQt912W56/CdLT7z8vU6dO1VtvvaX4+HitXbtWa9eu1W233aZNmzYpKiqqwLMBAAD4CovB+ewAAKAYslgsqly58jVfHggAAICSizO0AAAAAAAAYCoEWgAAAAAAADAVAi0AAAAAAACYivt3UgUAAChC3OYTAAAAeeEMLQAAAAAAAJgKgRYAAAAAAABMhUsOr4PD4dAvv/yi8PBwWSwWb48DAAAAAECRMQxD58+fV/ny5eXnx/kyKFoEWtfhl19+UcWKFb09BgAAAAAAXnP06FFV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AAAAAAAAYCoEWgAAAAAAADAVAi0AAAAAAACYCoHWNZo5c6bi4uIUHBysW265Rd988423RwIKRVJSkpo0aaLw8HCVK1dO3bt31969e3PUXLhwQUOGDFHp0qVls9nUq1cvnThxwksTA4Vr8uTJslgsGjFihHMbxwBKup9//ln33XefSpcurZCQENWrV09btmxxvm4YhsaPH6/Y2FiFhISoQ4cO+vHHH704MeA5WVlZGjdunKpUqaKQkBBVq1ZNkyZN0h9vRcwxgJJk/fr16tKli8qXLy+LxaIPPvggx+vufN7PnDmjvn37KiIiQpGRkRo0aJDS0tKK8F3AFxBoXYNFixZp5MiRmjBhgrZt26b69eurY8eOOnnypLdHAzxu3bp1GjJkiL766iutWrVKly5d0u2336709HRnzeOPP67//Oc/WrJkidatW6dffvlFPXv29OLUQOHYvHmz3njjDd100005tnMMoCQ7e/asWrRoocDAQK1cuVI//PCDXnrpJZUqVcpZM2XKFE2fPl2zZs3S119/rbCwMHXs2FEXLlzw4uSAZ7zwwgt6/fXXNWPGDO3evVsvvPCCpkyZotdee81ZwzGAkiQ9PV3169fXzJkzc33dnc9737599f3332vVqlX6+OOPtX79ej300ENF9RbgKwwUWNOmTY0hQ4Y4n2dlZRnly5c3kpKSvDgVUDROnjxpSDLWrVtnGIZhnDt3zggMDDSWLFnirNm9e7chydi0aZO3xgQ87vz580aNGjWMVatWGa1btzaGDx9uGAbHAEq+J5980mjZsmWerzscDiMmJsaYOnWqc9u5c+cMq9VqvPvuu0UxIlCoOnfubAwcODDHtp49exp9+/Y1DINjACWbJGPZsmXO5+583n/44QdDkrF582ZnzcqVKw2LxWL8/PPPRTY7Sj7O0CqgixcvauvWrerQoYNzm5+fnzp06KBNmzZ5cTKgaKSkpEiSoqKiJElbt27VpUuXchwTtWrVUqVKlTgmUKIMGTJEnTt3zvFZlzgGUPJ99NFHaty4se6++26VK1dODRo00FtvveV8/dChQzp+/HiOY8But+uWW27hGECJ0Lx5c61evVr79u2TJO3cuVMbN27UHXfcIYljAL7Fnc/7pk2bFBkZqcaNGztrOnToID8/P3399ddFPjNKrgBvD2A2p06dUlZWlqKjo3Nsj46O1p49e7w0FVA0HA6HRowYoRYtWqhu3bqSpOPHjysoKEiRkZE5aqOjo3X8+HEvTAl43sKFC7Vt2zZt3rz5qtc4BlDSHTx4UK+//rpGjhyp//u//9PmzZs1bNgwBQUFqX///s7PeW7/b8QxgJJg7NixSk1NVa1ateTv76+srCw999xz6tu3ryRxDMCnuPN5P378uMqVK5fj9YCAAEVFRXFMwKMItAC4bciQIfruu++0ceNGb48CFJmjR49q+PDhWrVqlYKDg709DlDkHA6HGjdurOeff16S1KBBA3333XeaNWuW+vfv7+XpgMK3ePFizZ8/XwsWLFCdOnW0Y8cOjRgxQuXLl+cYAAAv4pLDAipTpoz8/f2v+u1VJ06cUExMjJemAgrf0KFD9fHHH2vNmjWqUKGCc3tMTIwuXryoc+fO5ajnmEBJsXXrVp08eVINGzZUQECAAgICtG7dOk2fPl0BAQGKjo7mGECJFhsbq9q1a+fYFh8fryNHjkiS83PO/xuhpHriiSc0duxY/fWvf1W9evV0//336/HHH1dSUpIkjgH4Fnc+7zExMVf9wrTLly/rzJkzHBPwKAKtAgoKClKjRo20evVq5zaHw6HVq1erWbNmXpwMKByGYWjo0KFatmyZvvjiC1WpUiXH640aNVJgYGCOY2Lv3r06cuQIxwRKhPbt22vXrl3asWOH89G4cWP17dvX+XeOAZRkLVq00N69e3Ns27dvnypXrixJqlKlimJiYnIcA6mpqfr66685BlAiZGRkyM8v549N/v7+cjgckjgG4Fvc+bw3a9ZM586d09atW501X3zxhRwOh2655ZYinxklF5ccXoORI0eqf//+aty4sZo2bapXXnlF6enpeuCBB7w9GuBxQ4YM0YIFC/Thhx8qPDzced273W5XSEiI7Ha7Bg0apJEjRyoqKkoRERF67LHH1KxZM916661enh64fuHh4c57xmULCwtT6dKlnds5BlCSPf7442revLmef/559e7dW998843efPNNvfnmm5Iki8WiESNG6Nlnn1WNGjVUpUoVjRs3TuXLl1f37t29OzzgAV26dNFzzz2nSpUqqU6dOtq+fbumTZumgQMHSuIYQMmTlpam/fv3O58fOnRIO3bsUFRUlCpVqpTv5z0+Pl4JCQkaPHiwZs2apUuXLmno0KH661//qvLly3vpXaFE8vavWTSr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",
      "text/plain": [
       "<Figure size 1500x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "gkf = GroupKFold()\n",
    "X_, y_, groups_ = get_fake_X_y()\n",
    "plot_cv(GroupKFold, X_, y_, groups_)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "21261432",
   "metadata": {},
   "source": [
    "# Stratified Group KFold"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "0cda524a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABLQAAAHqCAYAAAAd5xeDAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABde0lEQVR4nO3dd3wUdf7H8fem94RQkgCB0AlViiCgUhWkIx6iKEUOGwgIiOQ8BGwoAhbg4NCj6OGJqHieDRHpolIVFFAgFJWOSUgiSUi+vz/4ZTUm2Wxgk82wr+fjsQ+yM5+Zz2eXHUjej5mJzRhjBAAAAAAAAFiEl7sHAAAAAAAAAIqDQAsAAAAAAACWQqAFAAAAAAAASyHQAgAAAAAAgKUQaAEAAAAAAMBSCLQAAAAAAABgKQRaAAAAAAAAsBQCLQAAAAAAAFgKgRYAAAAAAAAshUALAAAH1q5dq/79+6tKlSry8/NTuXLlVK9ePf3lL3/R3LlzlZyc7O4RHTp8+LBsNps6dOiQb11aWppGjx6t2NhY+fj4yGazaerUqZKkuLg42Wy2Ep9v6NChstlsWrduXYHrs7KytHjxYvXu3VtVq1ZVQECAgoODVbt2bQ0cOFBvvPGGMjIySnzO0jR16tQ8fxd/9sUXXygsLEw2m03PPPOMfXnu31lhj7i4uCua63I+E7mvZcmSJVfUGwAA4M983D0AAABl1RNPPKEpU6ZIkuLj49W6dWv5+vpq//79evfdd/X222+rZcuWuu666yRd+oH/yJEjMsaU2oxLlizRsGHDNGXKlEIDkMIkJCRozpw5ql27tgYMGCA/Pz9dc801JTLn5di3b5/69u2r/fv3y8fHRy1atFC7du2UnZ2tI0eOaMWKFVq+fLkeffRRffvttypXrpy7Ry5xmzZt0i233KLU1FQ999xzmjhxYr6a/v37KyQkJN/yChUqlMaIAAAApYJACwCAAmzfvl1Tp06Vr6+v3nrrLfXt2zfP+hMnTujf//63IiIi3DKfs6pUqaK9e/cqKCgo37r33ntPgYGB2rlzZ74AZM2aNcrKyiqtMfM5evSorr/+ep09e1ZDhgzRc889p6ioqDw1Z86c0T/+8Q/NmDFDaWlpV32gtWHDBvXo0UOpqamaNWuWxo0bV2DdzJkzr/hsLAAAgLKOQAsAgAK8++67MsZowIAB+cIsSYqOjtaECRNKf7Bi8vX1Vf369Qtc99NPP6latWoFns1Tq1atkh7NoXvvvVdnz57VX//6V73yyisF1lSoUEGPP/647rjjDoWHh5fyhKVr/fr16tGjh9LS0vTiiy9qzJgx7h4JAADArbiHFgAABTh9+rQkqWLFikXWrlu3TjabTUeOHJGkQu9b1KFDB9lsNh0+fFhvvPGGrrvuOoWGhuY5y+vDDz/UPffco/j4eIWFhSk4OFhNmzbVM888k+9eUR06dNCwYcMkSdOmTcvTN/eeRQXdQyt3DmOMjhw5kme7XI7ul3Ts2DGNGjVKtWrVUkBAgCIjI9WzZ0998cUXhb5HixYt0jXXXKPAwEBFR0dr6NChOnHiRIG1e/bs0apVqxQUFKSZM2cWus9cderUUWhoaJ5lufMbYzRnzhw1bdpUQUFBeS6pPHv2rB555BHVqVPH/jq6deumTz/9NF8PR/cikwq/V9Qf53jppZfUoEEDBQQEqEqVKho9erSSkpKKfH1r165V9+7dlZaWprlz57oszCrO6y/K+++/rzZt2igoKEjly5dX//799cMPP7hkTgAAgIJwhhYAAAWIjY2VJL3zzjtKSEhQpUqVCq2Njo7WkCFD9PbbbystLU1DhgyxryvovkXTp0/Xq6++qnbt2qlnz546duyYfd3w4cP122+/qVGjRmrSpImSk5P19ddf67HHHtOaNWv06aefytvbW5LUrVs3Xbx4UZs3b1bTpk3zhDW1a9cudN5u3bopLi5OS5cuVXBwsG677Tan35ctW7aoR48e+vXXX1WvXj316NFDp0+f1qpVq/TJJ59o2bJluv322/NsM2nSJD333HPy9fVVx44dFR4ero8//lhr165V06ZN8/X4+OOPJUm33HLLFZ95df/992vx4sVq37694uPjlZmZKUn6+eefdeONN+rQoUOqVq2a+vbtq9OnT+uzzz7TqlWrNHv2bD388MNX1PuPHnroIS1cuFAdOnRQ48aNtX79es2ZM0fr16/Xxo0bFRYWVuB2a9asUe/evfXbb79p/vz5uv/++10yjytf/4IFC/TAAw/IZrPphhtuUExMjL788ku1atVKvXr1csm8AAAA+RgAAJDPwYMHTWBgoJFkQkNDzZAhQ8wrr7xiduzYYS5evFjgNtWrVzeO/mtt3769kWQCAgLMunXrCqx57733THp6ep5lKSkppmfP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fn316NFDa9as0YgRI7Rv3z599tln2rp1q1q2bClJevXVV1WnTp1C95eSkqLk5GT17NlTtWrVkiTFx8fb10+bNk2TJk3SkCFDJEk1a9bUk08+qYkTJ2rKlCnFmv1KEGgBAAAAAAC4UFpamg4ePKjhw4fbz5SSLp39FB4eLunS5YI33XST6tWrp27duqlnz566+eabi92rYcOGec6CiomJ0e7duyVJ+/fvl4+Pj5o3b25fX7t2bZUrV67Q/UVGRmro0KHq2rWrbrrpJnXp0kUDBgxQTEyMJOmbb77R5s2b9fTTT9u3yc7O1oULF5Senq6goKBiv4bLQaAFAAAAAADgQqmpl+7B9corr6h169Z51uWGT82bN1diYqI+/vhjffbZZxowYIC6dOmit99+u1i9fH198zy32WzKycm5gumlxYsXa/To0frkk0+0fPly/f3vf9fq1at13XXXKTU1VdOmTbOfefZHAQEBV9S3OAi0AAAAAAAAXCgqKkqVK1fWoUOHNGjQoELrwsLCdPvtt+v222/Xbbfdpm7duuncuXOKjIyUr6+vsrOzr2iOevXq6eLFi9q5c6datGghSTpw4IB+/fXXIrdt1qyZmjVrpoSEBLVp00ZvvPGGrrvuOjVv3lz79+9X7dq1C93WFbMXhUALAAAAAADAxaZNm6bRo0crPDxc3bp1U0ZGhrZt26Zff/1V48aN0+zZsxUTE6NmzZrJy8tLK1asUHR0tCIiIiRd+m2Ba9asUbt27eTv7+/wMsHC1K9fX126dNG9996r+fPny9fXV+PHj1dgYKD9Ju9/lpiYqIULF6p3796qXLmy9u/frx9//FGDBw+WJD3++OPq2bOnqlWrpttuu01eXl765ptvtGfPHj311FMum70oXi7fIwAAAAAAgIf761//qldffVWLFy9W48aN1b59ey1ZskQ1atSQJIWGhmrGjBlq2bKlrr32Wh0+fFgfffSRvLwuRTWzZs3S6tWrFRsbq2bNml32HK+99pqioqJ04403ql+/fhoxYoRCQ0MLvTwwKChI+/btU//+/VW3bl3de++9GjlypO677z5JUteuXfXBBx/o008/1bXXXqvrrrtOL7zwQp6b2rtqdkc4QwsAAAAAAJRJXkEhkrePlH2x9Jp6+1zqW0xDhw7V0KFD8yy78847deeddxZYP2LEiDw3jP+zXr16qVev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kqRp06YpNTVVy5cvV506dfgNhwAAAAAAAChxxQq0srOz9dNPP6lJkyaSLl1+uGDBghIZDAAAAAAAAChIse6h5e3trZtvvlm//vprSc1TaubPn68mTZooLCxMYWFhatOmjT7++GN3jwUAAAAAAIAiFPum8I0aNdKhQ4dKYpZSVbVqVT377LPavn27tm3bpk6dOqlPnz767rvv3D0aAAAAAAAAHCh2oPXUU09pwoQJ+uCDD3T8+HGlpKTkeVhFr1691L17d9WpU0d169bV008/rZCQEH355ZfuHg0AAAAAAAAOFPum8N27d5ck9e7dWzabzb7cGCObzabs7GzXTVdKsrOztWLFCqWlpalNmzbuHgcAAAAAAAAOFDvQWrt2bUnM4Ra7d+9WmzZtdOHCBYWEhGjlypVq0KBBofUZGRnKyMiwP7fSGWkAAAAAAABXi2IHWu3bty+JOdyiXr162rVrl5KTk/X2229ryJAhWr9+faGh1vTp0zVt2rRSnhIAAAAAAAB/VOx7aEnSxo0bddddd6lt27b6+eefJUmvv/66Nm3a5NLhSpqfn59q166tFi1aaPr06WratKleeumlQusTEhKUnJxsfxw7dqwUpwUAAAAAAIB0GYHWO++8o65duyowMFA7duywX4KXnJysZ555xuUDlqacnJw8lxT+mb+/v8LCwvI8AAAAAAAAULou67ccLliwQK+88op8fX3ty9u1a6cdO3a4dLiSlJCQoA0bNujw4cPavXu3EhIStG7dOg0aNMjdowEAAAAAAMCBYt9Da//+/brxxhvzLQ8PD1dSUpIrZioVp06d0uDBg3X8+HGFh4erSZMmWrVqlW666SZ3jwYAAAAAAAAHih1oRUdH68CBA4qLi8uzfNOmTapZs6ar5ipx//rXv9w9AgAAAAAAAC5DsS85HDFihMaMGaOvvvpKNptNv/zyi5YtW6YJEybogQceKIkZAQAAAAAAALtin6E1adIk5eTkqHPnzkpPT9eNN94of39/TZgwQQ899FBJzAgAAAAAAADYFTvQstlseuyxx/TII4/owIEDSk1NVYMGDRQSElIS8wEAAAAAAAB5FPuSw3vuuUfnz5+Xn5+fGjRooFatWikkJERpaWm65557SmJGAAAAAAAAwK7YgdbSpUv122+/5Vv+22+/6bXXXnPJUAAAAAAAAEBhnL7kMCUlRcYY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AAAAgNKV+7Nw7s/GQGki0LoCZ8+elSTFxsa6eRIAAAAAANzj7NmzCg8Pd/cY8DAEWlcgMjJSknT06FEOXniklJQUxcbG6tixYwoLC3P3OECp4xiAp+MYgKfjGICnS05OVrVq1ew/GwOliUDrCnh5XboFWXh4OP+BwaOFhYVxDMCjcQzA03EMwNNxDMDT5f5sDJQmPnUAAAAAAACwFAItAAAAAAAAWAqB1hXw9/fXlClT5O/v7+5RALfgGICn4xiAp+MYgKfjGICn4xiAO9kMv18TAAAAAAAAFsIZWgAAAAAAALAUAi0AAAAAAABYCoEWAAAAAAAALIVA6zLNmzdPcXFxCggIUOvWrfX111+7eySgREyfPl3XXnutQkNDValSJfXt21f79+/PU3PhwgWNHDlS5cuXV0hIiPr376+TJ0+6aWKgZD377LOy2WwaO3asfRnHAK52P//8s+666y6VL19egYGBaty4sbZt22Zfb4zR448/rpiYGAUGBqpLly768ccf3Tgx4DrZ2dmaPHmyatSoocDAQNWqVUtPPvmk/ngrYo4BXE02bNigXr16qXLlyrLZbHrvvffyrHfm837u3DkNGjRIYWFhioiI0PDhw5WamlqKrwKegEDrMixfvlzjxo3TlClTtGPHDjVt2lRdu3bVqVOn3D0a4HLr16/XyJEj9eWXX2r16tXKysrSzTffrLS0NHvNww8/rP/9739asWKF1q9fr19++UW33nqrG6cGSsbWrVv1z3/+U02aNMmznGMAV7Nff/1V7dq1k6+vrz7++GN9//33mjVrlsqVK2evmTFjhl5++WUtWLBAX331lYKDg9W1a1dduHDBjZMDrvHcc89p/vz5mjt3rvbu3avnnntOM2bM0Jw5c+w1HAO4mqSlpalp06aaN29egeud+bwPGjRI3333nVavXq0PPvhAGzZs0L333ltaLwGewqDYWrVqZUaOHGl/np2dbSpXrmymT5/uxqmA0nHq1Ckjyaxfv94YY0xSUpLx9fU1K1assNfs3bvXSDJbtmxx15iAy50/f97UqVPHrF692rRv396MGTPGGMMxgKvfo48+aq6//vpC1+fk5Jjo6Gjz/PPP25clJSUZf39/85///Kc0RgRKVI8ePcw999yTZ9mtt95qBg0aZIzhGMDVTZJZuXKl/bkzn/fvv//eSDJbt26113z88cfG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uXPnVLVqVT3++OOO/1IAAADgEIEWAAAeLiQkRCEhIXrvvfeUkZFRaJ2Xl5defvllfffdd1q6dKk+//xzTZw4MU9Nenq6Xn75Zb355pv65JNPtG7dOvXr108fffSRPvroI73++uv65z//aQ99cj3//PNq2rSpdu7cqUmTJmnMmDFavXp1gXNkZWWpa9euCg0N1caNG7V582Z7IJWZmen0605PT9fMmTP1+uuva8OGDTp69KgmTJhgXz9r1iwtWbJEixYt0qZNm3Tu3DmtXLkyzz6mT5+u1157TQsWLNB3332nhx9+WHfddZfWr18vm82mpUuXauvWrXr55ZclSffff7+qVKlCoAUAAHClDAAA8Hhvv/22KVeunAkICDBt27Y1CQkJ5ptvvnG4zYoVK0z58uXtzxcvXmwkmQMHDtiX3XfffSYoKMicP3/evqxr167mvvvusz+vXr266datW55933777eaWW26xP5dkVq5caYwx5vXXXzf16tUzOTk59vUZGRkmMDDQrFq1qsBZ165daySZX3/9tdBZ582bZ6KiouzPY2JizIwZM+zPs7KyTNWqVU2fPn2MMcZcuHDBBAUFmS+++CJPr+HDh5s77rjD/vytt94yAQEBZtKkSSY4ONj88MMPBc4IAAAA53GGFgAAUP/+/fXLL7/o/fffV7du3bRu3To1b95cS5Yssdd89tln6ty5s6pUqaLQ0FDdfffdOnv2rNLT0+01QUFBqlWrlv15VFSU4uLiFBISkmfZqVOn8vRv06ZNvud79+4tcNZvvvlGBw4cUGhoqP3sssjISF24cEEHDx50+jX/edaYmBj7XMnJyTp+/Lhat25tX+/j46OWLVvanx84cEDp6em66aab7HOEhITotddeyzPHX/7yF/Xr10/PPvusZs6cqTp16jg9IwAAAArGTeEBAIAkKSAgQDfddJNuuukmTZ48WX/96181ZcoUDR06VIcPH1bPnj31wAMP6Omnn1ZkZKQ2bdqk4cOHKzMzU0FBQZIkX1/fPPu02WwFLsvJybnsOVNTU9WiRQstW7Ys37qKFSs6vZ+C5jJ/ukdWUXNI0ocffqgqVarkWefv72//Oj09Xdu3b5e3t7d+/PFHp/cPAACAwhFoAQCAAjVo0EDvvfeeJGn79u3KycnRrFmz5OV16QTvt956y2W9vvzyy3zP4+PjC6xt3ry5li9frkqVKiksLMxlM/xReHi4YmJi9NVXX+nGG2+UJF28eFHbt29X8+bNJV16f/z9/XX06FG1b9++0H2NHz9eXl5e+vjjj9W9e3f16NFDnTp1KpG5AQAAPAWBFgAAHu7s2bP6y1/+onvuuUdNmjRRaGiotm3bphkzZqhPnz6SpNq1aysrK0tz5sxRr169tHnzZi1YsMBlM2zevFkzZsxQ3759tXr1aq1YsUIffvhhgbWDBg3S888/rz59+uiJJ55Q1apVdeTIEb377ruaOHGiqlat6pKZxowZo2effVZ16tRR/fr1NXv2bPtvSZSk0NBQTZgwQQ8//LBycnJ0/fXXKzk5WZs3b1ZYWJiGDBmiDz/8UIsWLdKWLVvUvHlzPfLIIxoyZIi+/fZblStXziVzAgAAeCLuoQUAgIcLCQlR69at9cILL+jGG29Uo0aNNHnyZI0YMUJz586VJDVt2lSzZ8/Wc889p0aNGmnZsmWaPn26y2YYP368tm3bpmbNmumpp57S7Nmz1bVr1wJrg4KCtGHDBlWrVk233nqr4uPjNXz4cF24cMGlZ2yNHz9ed999t4YMGaI2bdooNDRU/fr1y1Pz5JNPavLkyZo+fbri4+PVrVs3ffjhh6pRo4ZOnz6t4cOHa+rUqfazuqZNm6aoqCjdf//9LpsTAADAE9lMcW4WAQAA4GJxcXEaO3asxo4d6+5RAAAAYBGcoQUAAAAAAABLIdACAAAAAACApXDJIQAAAAAAACyFM7QAAAAAAABgKQRaAAAAAAAAsBQCLQAAAAAAAFgKgRYAAAAAAAAshUALAAAAAAAAlkKgBQAAAAAAAEsh0AIAAAAAAIClEGgBAAAAAADAUgi0AAAAAAAAYCn/B1KUNEeRJso+AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 1500x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "gskf = StratifiedGroupKFold()\n",
    "X_, y_, groups_ = get_fake_X_y()\n",
    "np.random.shuffle(y_)\n",
    "plot_cv(StratifiedGroupKFold, X_, y_, groups_)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4716602c",
   "metadata": {},
   "source": [
    "# Time Series Split"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "bd4983bd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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e3ctW7asyLPNjh07VuQ2+ctr167t9LwAAACVHZccAgCAQrp16yZPT08tX75cOTk5Tm1jGIbD9Xl5eTpy5Iik/176eMMNN8hqtWrDhg1FXrroaj179pQkLVu27Jr207x5c40aNUqS9MMPP9iXl/QeHDx4UFLRl37u2rWryPuEffTRR5Kuhot/VP4ZZLm5uX94HwAAABUJgRYAACikTp06Gj58uI4ePap7771Xp06dKlRz8OBBffLJJ/bn//nPfzRo0CB9/fXXhWozMzP1yCOP6Pz586pdu7bi4uIkXb1c8cknn9TFixd111136fDhw4W2/fXXX/Xee++55HVNmDBB/v7+mjhxoj799NNC67Ozs/Xxxx/rl19+kSRlZWVp9uzZSk1NLVBns9m0atUqSVJUVJR9eceOHbVgwQJlZmYW2vfy5cs1f/58SdLdd99daL3NZtNjjz2mrKws+7Lk5GTNmTNHFotFjzzySOlf8P/JP7tr//79f3gfAAAAFQmXHAIAgCK9/vrrOnr0qD755BOtWrVKrVu3Vr169ZSZmamffvpJBw8e1J133qmBAwdKuhrILF26VEuXLlVERITatGmjatWq6cyZM9q+fbsuXLigwMBAvffeewXuOTVp0iTt27dP7733nmJiYtSmTRs1aNBAV65c0f79+/XTTz+pZcuWGjJkyDW/pkaNGunDDz/Ufffdp4EDB6pRo0aKiYlRYGCgfv31V+3YsUOZmZnauXOn6tatqytXrmjs2LGaOHGi2rVrp+joaF25ckXbtm3TiRMnFB0drQcffNC+/71792r48OF69NFH1bZtW9WrV0+XLl3S/v37tW/fPknSww8/rD59+hSa7Y477tDu3bt13XXXqXPnzkpLS9O6deuUk5Ojv//972rfvv0fft3R0dFq2bKltm/frg4dOqh58+by9PRUv379Sv1NkQAAABUBgRYAACiSv7+/vvjiC73//vtatGiRdu3ape+++041a9ZU/fr1NWTIEP35z3+21/fq1UsrVqzQ6tWrtXXrVu3atUtnzpyRv7+/GjRooAceeEBjxowp9G1+Hh4eevfdd3X33XfrzTff1LZt27Rjxw5Vq1ZNUVFReuKJJ3TPPfe47HXdeeed+v777zVr1iytWbNGa9askbe3t2rXrq2+ffvqrrvuUrNmzSRd/QbIuXPnau3atdq9e7e+//57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V65c0XfffWe/vHLTpk0aOnSoZs+erVtuuUWHDh3Sgw8+KOnqJZalmf1aVPlACwAAAAAAwNWmTp2qmTNn6q677pIkNWjQQD/99JP++c9/KiEhQcePH1fjxo118803y2KxqH79+vZta9asKUkKDQ0t9ovr8lWrVk1z5syRp6enmjZtqj59+mjt2rUaOXKk9u3bp6+++krbtm1T+/btJUn/+te/1Lhx42L3l56errS0NN1xxx267rrrJEkxMTH29dOnT9ekSZOUkJAgSWrYsKGeffZZPfnkk5o6dWqpZr8WBFoAAAAAAAAulJmZqUOHDmnEiBH2M6Wkq2c/Wa1WSVcvF+zZs6euv/569erVS3fccYduu+22Uvdq3rx5gbOgIiMjtWfPHknS/v375eXlpbZt29rXN2rUSNWqVSt2f2FhYRo2bJji4+PVs2dP9ejRQ4MGDVJkZKQkaffu3dqyZYuef/55+zZ5eXm6fPmysrKyFBAQUOrX8EcQaAEAAAAAALhQRsbVe3C99dZbuvHGGwusyw+f2rZtqyNHjuiLL77QV199pUGDBqlHjx76+OOPS9XL29u7wHOLxSKbzXYN00sLFizQmDFjtGrVKi1evFh///vftWbNGt10003KyMjQ9OnT7Wee/S8/P79r6lsaBFoAAAAAAAAuFB4ertq1a+vw4cMaPHhwsXUhISG65557dM899+juu+9Wr169dP78eYWFhcnb21t5eXnXNMf111+v3Nxc7dy5U+3atZMkHTx4UBcuXChx2zZt2qhNmzaaPHmy4uLi9MEHH+imm25S27ZttX//fjVq1KjYbV0xe0kItAAAAAAAAFxs+vTpGjNmjKxWq3r16qXs7Gxt375dFy5c0Pjx4zVr1ixFRkaqTZs28vDw0NKlSxUREaHQ0FBJV78tcO3aterUqZN8fX0dXiZYnKZNm6pHjx568MEHNW/ePHl7e2vChAny9/e33+T9944cOaI333xT/fr1U+3atbV//379/PPPGjp0qCTp6aef1h133KF69erp7rvvloeHh3bv3q0ffvhBzz33nMtmL4mHy/cIAAAAAABQxf3lL3/Rv/71Ly1YsEAtWrRQly5dtHDhQjVo0ECSFBwcrJdeeknt27fXDTfcoKNHj2rlypXy8Lga1cycOVNr1qxRVFSU2rRp84fnePfddxUeHq7OnTtrwIABGjly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91gAAAAAAAAoQalvCh8bG6vDhw+XxSzlqm7dupoxY4aSk5O1fft2de/eXXfeead+/PFHd48GAAAAAAAAB0odaD333HOaOHGili9frpSUFKWnpxd4mEXfvn3Vu3dvNW7cWE2aNNHzzz+voKAgffPNN+4eDQAAAAAAAA6U+qbwvXv3liT169dPFovFvtwwDFksFuXl5bluunKSl5enpUuXKjMzU3Fxce4eBwAAAAAAAA6UOtBav359WczhFnv27FFcXJwuX76soKAgLVu2TM2aNSu2Pjs7W9nZ2fbnZjojDQAAAAAAoLIodaDVpUuXspjDLa6//nrt2rVLaWlp+vjjj5WQkKANGzYUG2olJiZq+vTp5TwlAAAAAAAA/lep76ElSZs2bdL999+vjh076tdff5Ukvffee9q8ebNLhytrPj4+atSokdq1a6fExES1atVKr7/+erH1kydPVlpamv1x4sSJcpwWAAAAAAAA0h8ItD755BPFx8fL399fO3bssF+Cl5aWphdeeMHlA5Ynm81W4JLC3/P19VVISEiBBwAAAAAAAMrXH/qWw/nz5+utt96St7e3fXmnTp20Y8cOlw5XliZPnqyNGzfq6NGj2rNnjyZPnqykpCQNHjzY3aMBAAAAAADAgVLfQ2v//v3q3LlzoeVWq1WpqamumKlcnD59WkOHDlVKSoqsVqtatmyp1atXq2fPnu4eDQAAAAAAAA6UOtCKiIjQwYMHFR0dXWD55s2b1bBhQ1fNVebefvttd48AAAAAAACAP6DUlxyOHDlSY8eO1bfffiuLxaLffvtN77//viZOnKhHHnmkLGYEAAAAAAAA7Ep9htakSZNks9l06623KisrS507d5avr68mTpyoxx57rCxmBAAAAAAAAOxKHWhZLBb97W9/0xNPPKGDBw8qIyNDzZo1U1BQUFnMBwAAAAAAABRQ6ksOhw8frosXL8rHx0fNmjVThw4dFBQUpMzMTA0fPrwsZgQAAAAAAADsSh1oLVq0SJcuXSq0/NKlS3r33XddMhQAAAAAAABQHKcvOUxPT5dhGDIMQxcvXpSfn599XV5enlauXKlatWqVyZAAAAAAAABAPqcDrdDQUFksFlksFjVp0qTQeovFounTp7t0OAAAAAAAAOD3nA601q9fL8Mw1L17d33yyScKCwuzr/Px8VH9+vVVu3btMhkSAAAA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a82aNVq6dKlWrFhRZO3gwYP18ssv684779QzzzyjunXr6tixY/r000/15JNPqm7dui6ZaezYsZoxY4YaN26spk2batasWfZvSZSk4OBgTZw4UY8//rhsNptuvvlmpaWlacuWLQoJCVFCQoJWrFihd955R1u3blXbtm31xBNPKCEhQd9//72qVavmkjkBAACqIu6hBQBAFRcUFKQbb7xRr776qjp37qzY2FhNmTJFI0eO1Jw5cyRJrVq10qxZs/Tiiy8qNjZW77//vhITE102w4QJE7R9+3a1adNGzz33nGbNmqX4+PgiawMCArRx40bVq1dPd911l2JiYjRixAhdvnzZpWdsTZgwQUOGDFFCQoLi4uIUHBysAQMGFKh59tlnNWXKFCUmJiomJka9evXSihUr1KBBA505c0YjRozQtGnT7Gd1TZ8+XeHh4Xr44YddNicAAEBVZDFKc7MIAAAAF4uOjta4ceM0btw4d48CAAAAk+AMLQAAAAAAAJgKgRYAAAAAAABMhUsOAQAAAAAAYCqcoQUAAAAAAABTIdACAAAAAACAqRBoAQAAAAAAwFQItAAAAAAAAGAqBFoAAAAAAAAwFQItAAAAAAAAmAqBFgAAAAAAAEyFQAsAAAAAAACmQqAFAAAAAAAAU/n/sHLrcvGQO5wAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1500x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "tss = TimeSeriesSplit()\n",
    "X_, y_, groups_ = get_fake_X_y()\n",
    "np.random.shuffle(y_)\n",
    "plot_cv(TimeSeriesSplit, X_, y_, groups_)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "22c3cd5c",
   "metadata": {},
   "source": [
    "# Examples\n",
    "1. Small/imbalanced -> Stratified\n",
    "2. Group\n",
    "3. Shuffle is on"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "id": "ca1a9cee",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[LightGBM] [Info] Number of positive: 176, number of negative: 3312\n",
      "[LightGBM] [Info] Auto-choosing row-wise multi-threading, the overhead of testing was 0.000113 seconds.\n",
      "You can set `force_row_wise=true` to remove the overhead.\n",
      "And if memory is not enough, you can set `force_col_wise=true`.\n",
      "[LightGBM] [Info] Total Bins 633\n",
      "[LightGBM] [Info] Number of data points in the train set: 3488, number of used features: 10\n",
      "[LightGBM] [Info] [binary:BoostFromScore]: pavg=0.050459 -> initscore=-2.934824\n",
      "[LightGBM] [Info] Start training from score -2.934824\n",
      "\n",
      "===========Fold 0=============\n",
      "Our accuracy on val set is: 0.9510, and AUC of 0.8300\n",
      "[LightGBM] [Info] Number of positive: 195, number of negative: 3837\n",
      "[LightGBM] [Info] Auto-choosing row-wise multi-threading, the overhead of testing was 0.000100 seconds.\n",
      "You can set `force_row_wise=true` to remove the overhead.\n",
      "And if memory is not enough, you can set `force_col_wise=true`.\n",
      "[LightGBM] [Info] Total Bins 635\n",
      "[LightGBM] [Info] Number of data points in the train set: 4032, number of used features: 10\n",
      "[LightGBM] [Info] [binary:BoostFromScore]: pavg=0.048363 -> initscore=-2.979447\n",
      "[LightGBM] [Info] Start training from score -2.979447\n",
      "\n",
      "===========Fold 1=============\n",
      "Our accuracy on val set is: 0.9498, and AUC of 0.8421\n",
      "[LightGBM] [Info] Number of positive: 163, number of negative: 3306\n",
      "[LightGBM] [Info] Auto-choosing row-wise multi-threading, the overhead of testing was 0.000089 seconds.\n",
      "You can set `force_row_wise=true` to remove the overhead.\n",
      "And if memory is not enough, you can set `force_col_wise=true`.\n",
      "[LightGBM] [Info] Total Bins 632\n",
      "[LightGBM] [Info] Number of data points in the train set: 3469, number of used features: 10\n",
      "[LightGBM] [Info] [binary:BoostFromScore]: pavg=0.046988 -> initscore=-3.009744\n",
      "[LightGBM] [Info] Start training from score -3.009744\n",
      "\n",
      "===========Fold 2=============\n",
      "Our accuracy on val set is: 0.9395, and AUC of 0.8272\n",
      "[LightGBM] [Info] Number of positive: 195, number of negative: 3879\n",
      "[LightGBM] [Info] Auto-choosing row-wise multi-threading, the overhead of testing was 0.000093 seconds.\n",
      "You can set `force_row_wise=true` to remove the overhead.\n",
      "And if memory is not enough, you can set `force_col_wise=true`.\n",
      "[LightGBM] [Info] Total Bins 634\n",
      "[LightGBM] [Info] Number of data points in the train set: 4074, number of used features: 10\n",
      "[LightGBM] [Info] [binary:BoostFromScore]: pavg=0.047865 -> initscore=-2.990333\n",
      "[LightGBM] [Info] Start training from score -2.990333\n",
      "\n",
      "===========Fold 3=============\n",
      "Our accuracy on val set is: 0.9478, and AUC of 0.8750\n",
      "[LightGBM] [Info] Number of positive: 163, number of negative: 3214\n",
      "[LightGBM] [Info] Auto-choosing col-wise multi-threading, the overhead of testing was 0.000190 seconds.\n",
      "You can set `force_col_wise=true` to remove the overhead.\n",
      "[LightGBM] [Info] Total Bins 629\n",
      "[LightGBM] [Info] Number of data points in the train set: 3377, number of used features: 10\n",
      "[LightGBM] [Info] [binary:BoostFromScore]: pavg=0.048268 -> initscore=-2.981521\n",
      "[LightGBM] [Info] Start training from score -2.981521\n",
      "\n",
      "===========Fold 4=============\n",
      "Our accuracy on val set is: 0.9473, and AUC of 0.8224\n"
     ]
    }
   ],
   "source": [
    "sgk = StratifiedGroupKFold(n_splits=5, shuffle=True, random_state=529)\n",
    "X, y, groups = get_X_y(train)\n",
    "\n",
    "fold = 0\n",
    "aucs = []\n",
    "for train_idx, val_idx in sgk.split(X, y, groups):\n",
    "    X_tr = X.loc[train_idx]\n",
    "    y_tr = y.loc[train_idx]\n",
    "\n",
    "    X_val = X.loc[val_idx]\n",
    "    y_val = y.loc[val_idx]\n",
    "\n",
    "    clf = lgb.LGBMClassifier(n_estimators=100)\n",
    "    clf.fit(X_tr, y_tr)\n",
    "    pred = clf.predict(X_val)\n",
    "    pred_prob = clf.predict_proba(X_val)[:, 1]\n",
    "    \n",
    "    acc_score = accuracy_score(y_val, pred)\n",
    "    auc_score = roc_auc_score(y_val, pred_prob)\n",
    "\n",
    "    print(f'\\n===========Fold {fold}=============')\n",
    "    print(\n",
    "        f'Our accuracy on val set is: {acc_score:0.4f}, and AUC of {auc_score:0.4f}')\n",
    "    fold += 1\n",
    "    aucs.append(auc_score)\n",
    "    \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "id": "d15fa3de",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8393327772778564"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "oofh_auc = np.mean(aucs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "99d5f7df",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
